因工作上需要,将word文档进行拆分分别找了Python和Java的解决方案,其中Java版本使用
Spire.Doc库(Spire.Doc for Java 中文教程),只能按照段落去拆分文档。代码分享如下:
Python版本
# coding: utf-8
import win32com
from win32com.client import Dispatch, DispatchEx
import os
def copy_doc(doc, page_no):
try:
doc_add = word.Documents.Add()
newFile = 'test_new%d.docx' % page_no
doc_add.SaveAs(os.path.abspath(newFile)) # 创建新文件
doc_new = word.Documents.Open(os.path.abspath(newFile))
# 页对象
pages = doc.ActiveWindow.Panes(1).Pages.Count
if page_no > pages:
print("指定页索引超出已有页面")
else:
objRectangles = doc.ActiveWindow.Panes(1).Pages(page_no).Rectangles
for i in range(objRectangles.Count):
objRectangles.Item(i+1).Range.Copy()
doc_new.Range(doc_new.Content.End - 1,doc_new.Content.End - 1).Paste()
doc_new.Save()
doc_new.Close()
except Exception as e:
print(e)
word = Dispatch('Word.Application') # 打开word应用程序
try:
word.Visible = 0 # 后台运行,不显示
word.DisplayAlerts = 0 # 不警告
path = os.path.abspath('D:\\tmp\\sample.docx') # word文件路径
doc = word.Documents.Open(FileName=path)
# 页对象
pages = doc.ActiveWindow.Panes(1).Pages.Count
for i in range(1,pages + 1):
copy_doc(doc, i)
doc.Close()
except Exception as e:
print(e)
finally:
word.Quit
Java版本
import com.spire.doc.Bookmark;
import com.spire.doc.Document;
import com.spire.doc.collections.BookmarkCollection;
public class Main {
public static void main(String[] args) {
//加载Word文档
Document doc = new Document();
doc.loadFromFile("D:\\tmp\\2.docx");
//声明新的Document对象
Document newWord;
int pageCount = doc.getPageCount();
//遍历源文档中的节
for (int i = 0; i < doc.getSections().getCount(); i++) {
//初始化新的Document对象
newWord = new Document();
//将源文档中的指定节复制到新文档
newWord.getSections().add(doc.getSections().get(i).deepClone());
//保存新文档到指定文件夹
newWord.saveToFile(String.format("拆分结果-%d.docx", i));
}
}
}